package cn.mesmile.design.factory;

import cn.mesmile.design.factory.abstractfactory.FactoryProducer;
import cn.mesmile.design.factory.abstractfactory.OrderFactory;
import cn.mesmile.design.factory.abstractfactory.PayFactoryAbstract;
import cn.mesmile.design.factory.methodfactory.AliPayFactory;
import cn.mesmile.design.factory.methodfactory.PayFactory;
import cn.mesmile.design.factory.simplefactory.SimpleFactory;

/**
 * @author zb
 * @date 2020/11/15 12:05
 * @Description:
 */
public class FactoryTest {


    /**
     * 【简单工厂模式】
     * 核心组成
     *
     * Factory：工厂类，简单工厂模式的核心，它负责实现创建所有实例的内部逻辑
     * IProduct：抽象产品类，简单工厂模式所创建的所有对象的父类，描述所有实例所共有的公共接口
     * Product：具体产品类，是简单工厂模式的创建目标
     */
    public static void main(String[] args) {

        /*
         * 简单工厂违背了 【开闭】 原则，对扩展开放，对修改关闭，一旦有新的业务必须要修改 工厂内部逻辑
         */
        Pay pay = SimpleFactory.createPay("ali_pay");

        pay.unifiedorder();


        /**
         *  工厂方法  diagram
         */
        PayFactory aliPayFactory = new AliPayFactory();

        Pay pay2 = aliPayFactory.getPay();

        pay2.unifiedorder();


        /**
         * 抽象工厂方法
         */
        OrderFactory orderFactory = FactoryProducer.getFactory("ali_pay");

//        PayFactoryAbstract payFactoryAbstract = orderFactory.createPay();

        orderFactory.createPay().unifiedorder();

        orderFactory.createRefund().refund();
    }
}
